【cmake】CMakeList添加库

您所在的位置:网站首页 cmake - d选项 【cmake】CMakeList添加库

【cmake】CMakeList添加库

2023-04-24 18:38| 来源: 网络整理| 查看: 265

目录

​​官网查阅​​

​​开胃菜例子​​

​​CMakeLists生成和添加依赖库​​

​​add_library(生成库),target_link_libraries(生成目标连接的库),set_target_properties​​

​​CMAKE 添加编译选项|-g编译参数/选项​​

​​包含文件的的目录​​

​​CMake设置编译参数/选项​​

​​如何在cmakelists中加入-ldl编译选项​​

​​CMake指定gcc,g++版本编译​​

​​CMake 关闭警告的方法​​

​​关闭编译器优化​​

​​Debug和Release 方案​​

​​About table​​

​​About question​​

​​CMakeLists 实现动态宏开关​​

​​去掉编译优化​​

官网查阅

​​https://cmake.org/cmake/help/latest/search.html?q=add_library​​

开胃菜例子

生成一个可执行程序的 CMakeList

#添加包含文件的的目录include_directories(${cppzmq_INCLUDE_DIR}) #用${SOURCE_FILES}指定的文件,生成可执行文件sample_project add_executable(sample_project ${SOURCE_FILES}) #生成可执行文件sample_project 需要连接 ${CMAKE_THREAD_LIBS_INIT}指定的库target_link_libraries (sample_project ${CMAKE_THREAD_LIBS_INIT})

生成一个.so动态库的 CMakeList 

#用${SRC_LISTS}指定的所有的源文件生成一个库,名字叫libsuganadd_library(libsugan ${SRC_LISTS}) #生成libsugan库需要链接 ${OpenCV_LIBS}、 ${PROJECT_SOURCE_DIR}/lib/libCommonUtilities.so、${PROJECT_SOURCE_DIR}/lib/libInuStreams.sotarget_link_libraries(libsugan ${OpenCV_LIBS} ${PROJECT_SOURCE_DIR}/lib/libCommonUtilities.so ${PROJECT_SOURCE_DIR}/lib/libInuStreams.so)

CMakeLists生成和添加依赖库

Opencv依赖库的添加:

cmake_minimum_required( VERSION 2.8 )project( imageBasics )# 添加c++ 11标准支持set( CMAKE_CXX_FLAGS "-std=c++11" )# 寻找OpenCV库set(OpenCV_DIR /home/chaofan/opt/opencv-3.4.4/release)find_package( OpenCV 3 REQUIRED )# 添加头文件include_directories( ${OpenCV_INCLUDE_DIRS} )add_executable( imageBasics imageBasics.cpp )# 链接OpenCV库target_link_libraries( imageBasics ${OpenCV_LIBS} )

上面说明了添加依赖库的主要步骤:

第一个: 添加头文件

第二个:找到源文件

第三个:与目标链接起来

若工程中需要指定不同版本的opencv,则可以按照一下方法操作:

1.指定库路径

file(GLOB_RECURSE Opencv3.0_LIB "/home/LiuMC/software/third_lib/opencv3.0-install/lib/*.so")

2.指定头文件路径

set(Opencv3_INLCUDE_DIRS "/home/LiuMC/software/third_lib/opencv3.0-install/include")

3.添加头文件到工程

include_directories(include${Opencv3_INLCUDE_DIRS} )

4.添加库文件到工程

target_link_libraries(rovioLib ${Opencv3.0_LIB})

注意:为了避免不必要的麻烦,尽量将头文件和库文件加再第一项,如:

target_link_libraries(rovioLib ${Opencv3.0_LIB}${Opencv3.0_HAL_LIB}${catkin_LIBRARIES} )

link_libraries(dcn_v2_cuda_forward_v2) 和target_link_libraies的区别?

简单例子:

一、生成.so共享库文件

下面是我的几个文件:

1hello.cpp

//hello.cppint Calculate_sum_Of_Two_Number(int x,int y){int z=0;z=x+y;return (z);}

2hello.hpp

//hello.hpp#ifndef __HELLO_H#define __HELLO_Hint Calculate_sum_Of_Two_Number(int x,int y);#endif

3 main.cpp

//main.cpp#include "hello.hpp"#include int main(void){int a=0,b=0,c=0;printf("please input two parameter:");scanf("%d",&a);scanf("%d",&b);c=Calculate_sum_Of_Two_Number(a,b);printf("the sum is : %d",c);return 0;}

4 CMakeLists.txt

#要求的Cmake最低版本CMAKE_MINIMUM_REQUIRED( VERSION 2.8)#工程名称PROJECT(main)#设置编译器编译模式:set( CMAKE_BUILD_TYPE "Debug" )#生成共享库#get the shared package#here needs no .hppadd_library(calculate_shared SHARED hello.cpp)#生成可以执行的文件add_executable(main main.cpp)#连接共享库target_link_libraries(main calculate_shared)

上面CmakeLists.txt里面, 共享库的名称是calculate_shared,这个是我们可以自己更改的。生成的可执行文件是main, 这个名称也是可以更改的。

不过需要注意的是,hello.cpp里面不用在包含hello.hpp 了。(汗,因为这个导致出错,提示说是重复定义函数了);

编译生成:

mkdir build

cd    build

cmake ..

make

我们就可以看到build生成了 如下的文件:

CMakeCache.txt  cmake_install.cmake     main

CMakeFiles      libcalculate_shared.so  Makefile

 libcalculate_shared.so就是生成的共享库文件。

他们的路径是:/home/fan/dev/cmake/4-exer/

下面有build文件夹,以及main.cpp, hello.cpp, hello.hpp, 

build文件夹下面有共享库 libcalculate_shared.so.so

二、调用共享库文件

所有的外部依赖库都是这样的,比如opencv ,openni, eigen等等,原理是一样的,只不过他们已经安装在系统里面了,可以查找,而这个则是需要我们自己去配置。

即我上面生成的共享库文件本质上和opencv的库是相同的。只不过这个共享库需要自己手动配置。

比如我又新建了一个工程,需要调用上面的共享库 libcalculate_shared.so。

main.cpp如下:

//main.cpp#include #include #include "hello.hpp"using namespace std;int main(void){int x=2,y=3;int z=0;z=Calculate_sum_Of_Two_Number(x,y);cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3